package demo1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Demo {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //需求:调用Person的sayHello方法

        //1:实例化Person并调用sayHello方法
        /*
            优点:直接明了
            缺点:代码写死，后期开发中如果调用的对象随着业务的改变可能发生改变时，
                这样写会导致调用方也要随之修改，提高了维护成本
         */
        Person person = new Person();
        person.sayHello();

        //2:反射调用
        /*
            优点:代码灵活
            缺点:我们要编写大量的反射代码
         */
        Class cls = Class.forName("demo1.Person");
        Person p1 = (Person)cls.newInstance();
        p1.sayHello();

        //3:Spring容器
        AnnotationConfigApplicationContext context
                = new AnnotationConfigApplicationContext("demo1");
        Person p2 = context.getBean(Person.class);
        p2.sayHello();

        User u = context.getBean(User.class);
        u.sayHi();

    }
}
